Hardware peripheral devices (peripheral devices) are often included within systems to perform selected operations quickly and efficiently. The peripheral device typically is custom hardware that is designed to perform a selected operation efficiently. In this regard, peripheral devices can be referred to as “hardware accelerators.” One example of a custom peripheral device, or hardware accelerator, is a circuit or processor specifically designed to perform Fast Fourier Transform (FFT) operations. Typically, the hardware accelerator can perform the FFT operations in less time than a conventional, or general purpose, processor executing software would require to perform the same operations. Continuing with this example, a process within the system can offload an FFT operation to the peripheral device rather than perform the FFT operation itself, thereby increasing the overall system speed.
Peripheral devices typically are single core systems. Thus, when disposed within a multi-process system, the peripheral device can only service one request at a time. When performing an operation requested by a first process within the system, the peripheral device is busy, and thus, not available to service a request from any other process. Accordingly, requests for service directed to the peripheral device from other processes are not acted upon until the peripheral device completes processing of the request from the first process. Only when finished processing the first request from the first process will the peripheral device begin to service a next and different request.
While incorporation of a peripheral device has advantages in terms of reduced processing time, such devices also introduce complexity and potential bottlenecks into a system. Any process that wishes to utilize the peripheral device must include the necessary intelligence, whether via additional programming or circuitry, to determine whether the peripheral device is busy or available. The process further must have the intelligence to react to either condition. Accordingly, any designer of a process in the system that seeks to utilize the peripheral device must have knowledge of the way in which the peripheral device works in order to leverage functionality of the peripheral device. In the case of a software-based process, for example, the software developer must create the necessary program code for interacting with the hardware peripheral device as described. That program code must be configured to contend with cases in which the peripheral device is free and busy.